<?php
class prospectos_model extends CI_Model{
	
	function __construct(){
		parent::__construct();
	}
	
	/**
	 * Obtiene el listado de prospectos
	 */
	public function getProspectos(){
		$sql = '';
		//paginacion
		$params = array(
				'result_items_per_page' => '30',
				'result_page' => (isset($_GET['pag'])? $_GET['pag']: 0)
		);
		if($params['result_page'] % $params['result_items_per_page'] == 0)
			$params['result_page'] = ($params['result_page']/$params['result_items_per_page']);
		
		//Filtros para buscar
		if($this->input->get('ffecha1') != '' && $this->input->get('ffecha2') != '')
			$sql = " AND Date(c.fecha) BETWEEN '".$this->input->get('ffecha1')."' AND '".$this->input->get('ffecha2')."'";
		elseif($this->input->get('ffecha1') != '')
			$sql = " AND Date(c.fecha) = '".$this->input->get('ffecha1')."'";
		elseif($this->input->get('ffecha2') != '')
			$sql = " AND Date(c.fecha) = '".$this->input->get('ffecha2')."'";
		if($this->input->get('ffolio') != '')
			$sql .= " AND c.folio = '".$this->input->get('ffolio')."'";
		if($this->input->get('fid_cliente') != '')
			$sql .= " AND cs.id_sucursal = '".$this->input->get('fid_cliente')."'";
		
		$query = BDUtil::pagination("
				SELECT c.id_prospecto, Date(c.fecha) AS fecha, c.serie, c.folio, cs.nombre_fiscal, c.status, 
					(e.apellido_paterno || ' ' || e.apellido_materno || ' ' || e.nombre) AS nombre_vendedor
				FROM prospectos AS c 
					INNER JOIN clientes_sucursales AS cs ON cs.id_sucursal = c.id_cliente
					INNER JOIN empleados AS e ON e.id_empleado = c.id_vendedor
				WHERE c.status <> 'e'".$sql."
				ORDER BY (Date(c.fecha), c.folio) DESC
				", $params, true);
		$res = $this->db->query($query['query']);
		
		$response = array(
				'cotiza' => array(),
				'total_rows' 		=> $query['total_rows'],
				'items_per_page' 	=> $params['result_items_per_page'],
				'result_page' 		=> $params['result_page']
		);
		if($res->num_rows() > 0)
			$response['cotiza'] = $res->result();
		
		return $response;
	}
	
	/**
	 * Obtiene la informacion de una cotizacion
	 */
	public function getInfoCotizacion($id, $info_basic=false){
		$res = $this->db
			->select('*')
			->from('prospectos')
			->where("id_prospecto = '".$id."'")
		->get();
		if($res->num_rows() > 0){
			$response['info'] = $res->row();
			$response['info']->fecha = substr($response['info']->fecha, 0, 10);
			$res->free_result();
			if($info_basic)
				return $response;
			
			$this->load->model('clientes_model');
			$prov = $this->clientes_model->getInfoCliente($response['info']->id_cliente, true);
			$response['info']->cliente = $prov['info']->nombre_fiscal;
			$response['info']->cliente_dias_credito = $prov['info']->dias_credito;
			$response['info']->cliente_info .= $prov['info']->calle!=''? $prov['info']->calle: '';
			$response['info']->cliente_info .= $prov['info']->no_exterior!=''? ' #'.$prov['info']->no_exterior: '';
			$response['info']->cliente_info .= $prov['info']->no_interior!=''? '-'.$prov['info']->no_interior: '';
			$response['info']->cliente_info .= $prov['info']->colonia!=''? ', '.$prov['info']->colonia: '';
			$response['info']->cliente_info .= "\n".($prov['info']->localidad!=''? $prov['info']->localidad: '');
			$response['info']->cliente_info .= $prov['info']->municipio!=''? ', '.$prov['info']->municipio: '';
			$response['info']->cliente_info .= $prov['info']->estado!=''? ', '.$prov['info']->estado: '';
			
			$this->load->model('empleados_model');
			$prov = $this->empleados_model->getInfoEmpleado($response['info']->id_vendedor, true);
			$response['info']->nombre_vendedor = $prov['info']->apellido_paterno.' '.$prov['info']->apellido_materno.' '.$prov['info']->nombre;
			
			//productos
			$res = $this->db
				->select('p.id_producto, p.codigo, p.nombre, cp.taza_iva, cp.cantidad, cp.precio_unitario, 
						cp.importe, cp.importe_iva, cp.total')
				->from('prospectos_productos AS cp')
					->join('productos AS p', 'p.id_producto = cp.id_producto', 'inner')
				->where("cp.id_prospecto = '".$id."'")
			->get();
			if($res->num_rows() > 0){
				$response['productos'] = $res->result();
			}
			$res->free_result();
			
			return $response;
		}else
			return false;
	}
	
	
	/**
	 * Obtiene el folio que se le asignara a los prospectos, el consecutivo
	 */
	public function getFolioProsp(){
		$res = $this->db->query("SELECT get_folio_prospecto();");
		$data = $res->row();
		return $data->get_folio_prospecto;
	}
	
	/**
	 * Agrega un prospecto a la bd
	 */
	public function addProspecto(){
		$id_prosp = BDUtil::getId();
		$data = array(
			'id_prospecto' 	=> $id_prosp,
			'id_cliente' 	=> $this->input->post('did_cliente'),
			'id_vendedor' 	=> $this->input->post('did_vendedor'),
			'id_usuario' 	=> $_SESSION['id_empleado'],
			'serie' 		=> $this->input->post('dserie'),
			'folio' 		=> $this->input->post('dfolio'),
			'fecha' 		=> $this->input->post('dfecha'),
			'subtotal' 		=> $this->input->post('dtsubtotal'),
			'importe_iva' 	=> $this->input->post('dtiva'),
			'total' 		=> $this->input->post('dttotal')
		);
		$this->db->insert('prospectos', $data);
		
		//productos para las prospectos
		if(isset($_POST['dpid_producto'])){
			$this->addProductos($id_prosp);
		}
		
		return array(true, '', $id_prosp);
	}
	
	/**
	 * Cancela un prospecto, la elimina
	 */
	public function cancelaProspecto(){
		$this->db->update('prospectos', array('status' => 'e'), "id_prospecto = '".$_GET['id']."'");
		return array(true, '');
	}
	
	
	/**
	 * Agrega los productos a una prospecto
	 * @param unknown_type $id_prosp
	 * @param unknown_type $tipo
	 */
	public function addProductos($id_prosp, $tipo='add'){
		if(is_array($_POST['dpid_producto'])){
			$data_productos = array();
			foreach($_POST['dpid_producto'] as $key => $producto){
				//Datos de los productos de la cotizacion
				$data_productos[] = array(
					'id_prospecto' => $id_prosp,
					'id_producto' => $producto,
					'taza_iva' => $_POST['dptaza_iva'][$key],
					'cantidad' => $_POST['dpcantidad'][$key],
					'precio_unitario' => $_POST['dpprecio_unitario'][$key],
					'importe' => $_POST['dpimporte'][$key],
					'importe_iva' => $_POST['dpimporte_iva'][$key],
					'total' => ($_POST['dpimporte'][$key]+$_POST['dpimporte_iva'][$key]),
				);
			}

			if(count($data_productos) > 0){
				if($tipo != 'add' && $this->input->post('dpupdate') == 'si'){
					$this->db->delete('prospectos_productos', "id_prospecto = '".$id_prosp."'");
				}
				//se insertan los productos de la cotizacion	
				$this->db->insert_batch('prospectos_productos', $data_productos);
			}
			
			return array(true, '');
		}
		return array(false, '');
	}
}